package com.ruoyi.parttime.mapper;

import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import java.util.Map;

import com.ruoyi.parttime.domain.ApplyForParrtime;
import com.ruoyi.parttime.domain.MonthData;
import com.ruoyi.parttime.domain.vo.ApplyForParrtimeVo;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

/**
 * 兼职申请Mapper接口
 *
 * @author ruoyi
 * @date 2024-04-02
 */
@Mapper
public interface ApplyForParrtimeMapper {
    /**
     * 查询兼职申请
     *
     * @param id 兼职申请主键
     * @return 兼职申请
     */
    ApplyForParrtime selectApplyForParrtimeById(Long id);

    /**
     * 查询兼职申请列表
     *
     * @param applyForParrtime 兼职申请
     * @return 兼职申请集合
     */
    List<ApplyForParrtime> selectApplyForParrtimeList(ApplyForParrtime applyForParrtime);

    /**
     * 新增兼职申请
     *
     * @param applyForParrtime 兼职申请
     * @return 结果
     */
    int insertApplyForParrtime(ApplyForParrtime applyForParrtime);

    /**
     * 修改兼职申请
     *
     * @param applyForParrtime 兼职申请
     * @return 结果
     */
    int updateApplyForParrtime(ApplyForParrtime applyForParrtime);

    /**
     * 删除兼职申请
     *
     * @param id 兼职申请主键
     * @return 结果
     */
    int deleteApplyForParrtimeById(Long id);

    /**
     * 批量删除兼职申请
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deleteApplyForParrtimeByparttimePublishIds(Long[] ids);

    List<ApplyForParrtime> selectApplyForParrtime(ApplyForParrtime applyForParrtime);

    int updateApplyForStatusById(@Param("id") Long id, @Param("applyForStatus") Integer applyForStatus);

    ApplyForParrtime selectApplyForParrtimeBypublishId(@Param("parttimePublishId") Long parttimePublishId,
                                                       @Param("applyForUserId") Long applyForUserId);

    List<ApplyForParrtime> getByTimeList(@Param("applyForStatus") Integer status,
                                         @Param("createTime") LocalDateTime createTime);

    /**
     * 查询今日兼职申请数
     *
     * @return 兼职申请数
     */
    Integer getStatisticsNum(@Param("startTime") LocalDateTime startTime,
                             @Param("endTime") LocalDateTime endTime);

    /**
     * 查询今日兼职申请成功或失败数
     * @return 兼职申请数
     */
    @MapKey("apply_for_status")//指定返回的数据中Map集合的key
    Map<Integer, Integer> getStatisticsNumBystatus(@Param("startTime") LocalDateTime startTime,
                                                   @Param("endTime") LocalDateTime endTime);

    List<ApplyForParrtimeVo> selectApplyForParrtimeAndParttimePublish(ApplyForParrtimeVo applyForParrtimeVo);

    List<MonthData> getMonthNum();
}
